\chapter{XML eXtensible Markup Language (Lenguaje de marcas extensible)}
XML \footnote{http://www.w3.org/TR/REC-xml/}, siglas en ingl\'es de eXtensible Markup Language ('lenguaje de marcas extensible'), es un lenguaje de marcas desarrollado por el World Wide Web Consortium (W3C) utilizado para almacenar datos en forma legible. Deriva del lenguaje SGML y permite definir la gram\'atica de lenguajes espec\'ificos para estructurar documentos grandes. A diferencia de otros lenguajes, XML da soporte a bases de datos, siendo \'util cuando varias aplicaciones se deben comunicar entre s\'i o integrar informaci\'on. \\
Dicho lenguaje no ha nacido s\'olo para su aplicaci\'on para Internet, sino que se propone como un est\'andar para el intercambio de informaci\'on estructurada entre diferentes plataformas. Se puede usar en bases de datos, editores de texto, hojas de cálculo y casi cualquier cosa imaginable.\\
XML proviene de un lenguaje inventado por IBM en los a\~nos setenta, llamado GML (Generalized Markup Language), que surgi\'o por la necesidad que ten\'ia la empresa de almacenar grandes cantidades de informaci\'on. Este lenguaje gust\'o a la ISO, por lo que en 1986 trabajaron para normalizarlo, creando SGML (Standard Generalized Markup Language).\\
La estructura de este tipo de documentos es muy sencilla y se mostrara un ejemplo de una base de datos de un antiviral usado en nuestra tesis.\\

	
\begin{lstlisting}[language=XML, morekeywords={antiviral, group, resistance}]
 <antiviral id="Abacabir"  num = "0" type = "tRT" class = "cNRTI">
        <group min="1.0">
            <resistance pos="164" aminos="R" weight="1.0"/>
            <resistance pos="173" aminos="V" weight="0.5"/>
            <resistance pos="214" aminos="F" weight="0.5"/>
            <resistance pos="283" aminos="V" weight="1.0"/>
        </group>
 </antiviral>
\end{lstlisting}

\chapter{Combinaci\'on de Antivirales}
\label{combinacion_arvs}
El paso 7.2 de la Soluci\'on Propuesta del capitulo \ref{SP} realiza una combinaci\'on de \textit{ARVs}, la cual se explica a continuaci\'on:\\

\begin{itemize}


\item[1.] Se calcula el conjunto de partes de cada grupo de resistencias que pertenecen a cada ARV:\\
\\Considerando a $ARVs$ como el conjunto de antivirales que aplican, se calcula el conjunto partes para cada grupo $G_{i}$ perteneciente a cada \textit{ARV}. Se define a R como el resultado de la uni\'on de los conjuntos partes resultantes, excluyendo al conjunto vac\'io, es decir:
\begin{center}
\[ R = \forall A_{i} \in ARVs(\bigcup_{G_{i} \in A_{i}} P(G_{i}) - \emptyset) \]
\end{center}

\item[2.] Se aplican las siguientes reglas al conjunto \textit{R} obtenido anteriormente con el objetivo de eliminar informaci\'on redundante e innecesaria. Sea: \\
- $R = \lbrace x_{1}, x_{2}, ... , x_{n} \rbrace$\\
- $x_{i}$ un elemento de \textit{R}, representado como: $\lbrace r_{1}, r_{2}, ... , r_{n}\rbrace$.\\
- $r_{i}$ que representa a una resistencia.\\
- El operador '$-$' que representa la diferencia de conjuntos.\\

Se calcula un nuevo conjunto, $R_{m}$, a partir de la eliminaci\'on de elementos de \textit{R} que resultan de la aplicaci\'on de las siguientes reglas.
Siendo $R_{m} = R$;
\begin{itemize}
	\item[2.1] \textit{Eliminaci\'on de elementos que no superen o igualen el peso m\'inimo del grupo:}
				Se eliminan aquellos $x_{i}$ cuyos pesos no superen o igualen al peso m\'inimo ($G_{w}$) del grupo 
				al que pertenecen.\\
				Formalmente:
				\begin{center}
					Si $(weight(x_{i}) < G_{w}) \Longrightarrow (R_{m}\prime = R_{m} - x_{i})$,
				\end{center}
				donde, $R_{m}\prime$ es el resultado, $weight(resistances) \rightarrow double$ representa la 		
				funci\'on que, dado un conjunto de resistencias, retorna la sumatoria de los pesos de cada una de 	
				ellas.\\

	\item[2.2] \textit{Eliminaci\'on de elementos que contienen a otros:}
				Se eliminan aquellos $x_{j}$ de $R_{m}$ que contengan los elementos de alg\'un $x_{i}$ que cumplan 	
				la condici\'on del peso m\'inimo del grupo.\\
				Formalmente:
				\begin{center}
				Si $(x_{i} \subset x_{j}) \Longrightarrow (R_{m}\prime = R_{m} - x_{j})$ \footnote{$x_{i}$ y $x_{j}$ 				cumplen la condici\'on del peso m\'inimo del grupo.}\\
				\end{center}
				donde, $i \neq j$ y $R_{m}\prime$ representa el resultado.
\end{itemize}

\item[3.]\textbf{Cálculo del producto cartesiano entre grupos de ARVs}: Sea $R_{m}$ el conjunto resultado obtenido en el paso anterior (minimizaci\'on del conjunto R), se reagrupan todos los subconjuntos del mismo (cada uno de ellos representa algún elemento del conjunto de partes perteneciente a un grupo de un ARV determinado) de acuerdo al ARV al que pertenecen. Esto es:\\
- $R_{m}\_reagrupado = \lbrace G_{A1}, G_{A2}, ... , G_{An}\rbrace$;\\
- $G_{Ai} = \lbrace x_{1}, x_{2}, ..., x_{n}\rbrace$\footnote{Cabe aclarar que no es necesario discriminar estos elementos de acuerdo al grupo del cual provienen.}, donde cada $x_{j}$ pertenece al conjunto de partes de un grupo determinado del ARV '\textit{Ai}'.\\

A partir del nuevo conjunto, $R_{m}\_reagrupado$, se realiza el producto cartesiano entre cada uno de los $G_{Ai}$, es decir:

\begin{center}
$R_{x} = G_{A1}$ x $G_{A2}$ x $...$ x $G_{An}$
\end{center}

Cabe destacar que cada elemento $x_{i}$ perteneciente a $R_{x}$ tiene las resistencias necesarias para generar mutantes que sean resistentes a todos los ARVs de la selección corriente.\\

\item[4.]\textbf{Expansi\'on a codones:} Considerando a \textit{p} como un elemento de $R_{X}$, \textit{g} y \textit{x} como en el paso anterior, cada $r_{i}$ (resistencia) perteneciente a \textit{x} se representa de la siguiente manera:

$r_{i} = (pos_{i}, amin_{i}, weight_{i})$, donde $amin_{i}$ puede ser codificado por m\'as de un cod\'on.\\

Para cada resistencia $r_{i}$ perteneciente a $R_{X}$ se realiza el reemplazo de $amin_{i}$ por cada una de las posibles codificaciones a codones. En otras palabras, se realiza un nuevo producto cartesiano que corresponde a la expansi\'on antes mencionada.\\
Formalmente:\\

\small
$expand(r_{i}) \Longrightarrow (r_{i} = \lbrace (pos_{i}, codon_{i1}, weight_{i}), (pos_{i}, codon_{i2}, weight_{i}), (pos_{i}, codon_{i3}, weight_{i}) \rbrace )$\footnote{Considerando a $codon_{i1}, codon_{i2}, codon_{i3}$ como todas las posibles codificaciones de $amin_{i}$.}, \\


\normalsize
donde $expand(resistance)\rightarrow list<resistance>$ representa la funci\'on que expande cada amino\'acido de la resistencia tomada como entrada, a todas sus posibles codificaciones en codones.


\end{itemize}

\subsection{Ejemplo de combinaci\'on de \textit{ARVs}}
En esta secci\'on mostraremos un ejemplo del resultado obtenido al combinar dos \textit{ARVs}.\\
Supongamos que se desea combinar los \textit{ARVs} \textit{Abacabir} y \textit{Tenofovir}, pertenecientes a la Base de Datos \ref{base_datos}:\\

\begin{itemize}

\item[1-] \textbf{C\'alculo del conjunto partes y minimizaci\'on:} Aplicando el paso 1 y 2 mencionados anteriormente, obtendremos el siguiente resultado:\\
Para una mejor lectura se utilizar\'a una nueva notaci\'on en forma de 3-upla, por ejemplo:\\
La resistencia $<resistance \ pos="164" \ aminos="R" \ weight="1.0"/>$ se representar\'a $<!--(164, R, 1.0)-->$.
\begin{lstlisting}[language=C++, morekeywords={antiviral, group}]

   <antiviral "Abacabir">
        <group min="1.0">
            // Combinacion 1
            <!--(164, R, 1.0)-->
            
            // Combinacion 2
            <!--(173, V, 0.5)-->
            <!--(214, F, 0.5)-->
            
            // Combinacion 3
            <!--(283, V, 1.0)-->
        </group>
    </antiviral>
	
	<antiviral "Tenofovir">	
        <group min="1.0">
            // Combinacion 1
            <!--(164, R, 1.0)-->
            
            // Combinacion 2
            <!--(169, E, 1.0)-->
        </group>
    </antiviral>	

\end{lstlisting}

\item[2-] \textbf{C\'alculo del producto cartesiano:} Aplicando el paso 3 al resultado obtenido en el punto anterior, obtenemos:\\

\begin{lstlisting}[language=C++, morekeywords={antiviral, group}]
	//Combinacion 1
	<!--(164, R, 1.0)-->
	
	//Combinacion 2
	<!--(164, R, 1.0); (169, E, 1.0)-->
	
	//Combinacion 3	
	<!--(164, R, 1.0); (283, V, 1.0)-->
	
	//Combinacion 4
	<!--(169, E, 1.0); (283, V, 1.0)-->
	
	//Combinacion 5
	<!--(164, R, 1.0); (173, V, 0.5); (214, F, 0.5)-->
	
	//Combinacion 6
	<!--(169, E, 1.0); (173, V, 0.5); (214, F, 0.5)-->
\end{lstlisting}

\item[3-]\textbf{Expanci\'on a codones:} Por \'ultimo se aplica el paso 4, que permite expandir los amino\'acidos de las combinaciones anteriores a sus respectivos codones:\\
Por una cuesti\'on de legibilidad solo mostraremos la expansi\'on a codones de la combinaci\'on 2, obteniendo:\\
\begin{itemize}
	\item \textit{Codones a los que expande el amino\'acido} R: (CGU); (CGC); (CGA); (CGG); (AGA); (AGG)
	\item \textit{Codones a los que expande el amino\'acido} E: (GAA); (GAG)
\end{itemize}
\begin{lstlisting}[language=C++, morekeywords={antiviral, group}]
	//Combinacion 2 expandida
	<!--(169, GAA); (164, CGU)-->
	<!--(169, GAG); (164, CGU)-->
	<!--(169, GAA); (164, CGC)-->
	<!--(169, GAG); (164, CGC)-->
	<!--(169, GAA); (164, CGA)-->
	<!--(169, GAG); (164, CGA)-->
	<!--(169, GAA); (164, CGG)-->
	<!--(169, GAG); (164, CGG)-->
	<!--(169, GAA); (164, AGA)-->
	<!--(169, GAG); (164, AGA)-->
	<!--(169, GAA); (164, AGG)-->
	<!--(169, GAG); (164, AGG)-->
\end{lstlisting}
\end{itemize}

